// System Information (系统信息) 示例
program SystemInformation;

{$mode objfpc}{$H+}

uses
  SysUtils, DateUtils;

var
  I: Integer;
  EnvVar: String;

begin
  WriteLn('=== Pascal 系统信息获取示例 ===');
  WriteLn;
  
  // 程序信息
  WriteLn('1. 程序信息:');
  WriteLn('   程序名称: ', ParamStr(0));
  WriteLn('   参数数量: ', ParamCount());
  WriteLn;
  
  // 命令行参数
  if ParamCount() > 0 then
  begin
    WriteLn('2. 命令行参数:');
    for I := 1 to ParamCount() do
      WriteLn('   参数 ', I, ': ', ParamStr(I));
    WriteLn;
  end;
  
  // 系统时间
  WriteLn('3. 系统时间:');
  WriteLn('   当前日期时间: ', DateTimeToStr(Now()));
  WriteLn('   日期: ', DateToStr(Date()));
  WriteLn('   时间: ', TimeToStr(Time()));
  WriteLn('   年: ', YearOf(Now()), ' 月: ', MonthOf(Now()), ' 日: ', DayOf(Now()));
  WriteLn('   时: ', HourOf(Now()), ' 分: ', MinuteOf(Now()), ' 秒: ', SecondOf(Now()));
  WriteLn;
  
  // 环境变量
  WriteLn('4. 常用环境变量:');
  EnvVar := GetEnvironmentVariable('PATH');
  WriteLn('   PATH 前50个字符: ', Copy(EnvVar, 1, 50), '...');
  
  EnvVar := GetEnvironmentVariable('USERNAME');
  if EnvVar <> '' then
    WriteLn('   USERNAME: ', EnvVar)
  else
    WriteLn('   USERNAME: (未设置)');
    
  EnvVar := GetEnvironmentVariable('HOME');
  if EnvVar <> '' then
    WriteLn('   HOME: ', EnvVar)
  else
    WriteLn('   HOME: (未设置)');
    
  EnvVar := GetEnvironmentVariable('TEMP');
  if EnvVar <> '' then
    WriteLn('   TEMP: ', EnvVar)
  else
    WriteLn('   TEMP: (未设置)');
  WriteLn;
  
  // 系统目录
  WriteLn('5. 系统目录:');
  WriteLn('   当前目录: ', GetCurrentDir());
  WriteLn('   程序目录: ', ExtractFileDir(ParamStr(0)));
  WriteLn;
  
  // 磁盘信息
  WriteLn('6. 磁盘信息:');
  WriteLn('   当前驱动器总空间: ', DiskSize(ExtractFileDrive(GetCurrentDir())[1]) div (1024*1024*1024), ' GB');
  WriteLn('   当前驱动器可用空间: ', DiskFree(ExtractFileDrive(GetCurrentDir())[1]) div (1024*1024*1024), ' GB');
  WriteLn;
  
  // 系统信息
  WriteLn('7. 其他系统信息:');
  {$IFDEF WINDOWS}
  WriteLn('   操作系统: Windows');
  {$ENDIF}
  {$IFDEF LINUX}
  WriteLn('   操作系统: Linux');
  {$ENDIF}
  {$IFDEF DARWIN}
  WriteLn('   操作系统: macOS');
  {$ENDIF}
  WriteLn('   编译器版本: ', {$I %FPCVERSION%});
  WriteLn('   目标CPU: ', {$I %FPCTARGETCPU%});
  WriteLn('   目标操作系统: ', {$I %FPCTARGETOS%});
  WriteLn;
  
  WriteLn('系统信息获取示例完成。');
  ReadLn;
end.